#ifndef IPC_COMMON_H
#define IPC_COMMON_H


#include <stdlib.h>
#include <stdbool.h>

#include "internal/cef_string.h"
#include "capi/cef_values_capi.h"
#include "capi/cef_v8_capi.h"

#include "tools/log_util.h"
#include "ipc/ipc_value.h"
#include "logger.h"


// js 调用相关操作函数
// 合并回调结构和上下文的结构体
typedef struct {
    cef_v8_array_buffer_release_callback_t callback; // 必须作为第一个成员
    cef_binary_value_t *binary;
    void *copied_buffer;
} BinaryReleaseContext;

// 增强版JS执行函数（自动管理上下文）
// cef_v8_value_t* execute_js_function(cef_v8_value_t *func, cef_list_value_t *args);

cef_v8_value_t* execute_js_function_single_arg(cef_v8_value_t* func, cef_v8_value_t* arg);

// 释放回调实现
void CEF_CALLBACK release_buffer_wrapper(struct _cef_v8_array_buffer_release_callback_t *self, void *buffer);

cef_v8_value_t *convert_cefvalue_to_v8value(cef_list_value_t *list, size_t index);

// 辅助函数：转换字典到V8对象
cef_v8_value_t *convert_cefdict_to_v8object(cef_dictionary_value_t *dict);

// 辅助函数：转换列表到V8数组
cef_v8_value_t *convert_ceflist_to_v8array(cef_list_value_t *list);

// 递归转换V8值到CEF列表
cef_list_value_t *convert_v8value_to_cef_list(cef_v8_value_t *v8value);

// 字典转换函数
void convert_v8object_to_cef_dict(cef_v8_value_t *obj, cef_dictionary_value_t *dict);

// 包装函数
cef_dictionary_value_t *convert_v8object_to_dict(cef_v8_value_t *obj);

// 将 cef_v8_value_t 转换为 cef_value_t（仅处理基础类型）
cef_value_t* ConvertV8ValueToCefValue(cef_v8_value_t* v8_value);

cef_v8_value_t* ConvertCefValueToV8Value(cef_value_t* cef_val);


// ------------------------------------多参数支持--------------------------------------------------
cef_list_value_t *convert_v8_value_to_cef_list_value(cef_v8_value_t *v8_value);
cef_v8_value_t *convert_cef_list_value_to_v8_value(cef_list_value_t *list_value, cef_frame_t *frame);
cef_v8_value_t *execute_js_function(cef_v8_value_t *func, cef_v8_value_t *arg, cef_frame_t *frame);






#endif